package com.collabscm.pf.service.support;

import java.io.Serializable;

import javax.validation.constraints.NotNull;

import com.collabscm.pf.dao.DatabaseDao;
import com.collabscm.pf.logging.Logger;
import com.collabscm.pf.logging.LoggerFactory;
import com.collabscm.pf.service.DomainService;

/**
 * DomainService的抽象实现，为了提供通用的实现，另外：还实现对DAO的绑定等。
 * 
 * @author Zeng Raoxing
 */
public abstract class DomainServiceSupport<T, PK extends Serializable> 
										implements DomainService<T, PK> {
	private static final long serialVersionUID = 1L;
	/**
	 * 日志记录对象
	 */
	protected Logger logger = LoggerFactory.getLogger(getClass());
	
	/** 
     * 创建一个新的实体对象，并将其持久化到数据库中。 
     */
    public void create(T entity) {
    	getDatabaseDao().create(entity);
    }

    /** 
     * 根据主键得到一个实体对象
     */
    public T find(PK id) {
    	return getDatabaseDao().find(id);
    }

    /** 
     * 更新实体对象
     */
    public void update(T entity) {
    	getDatabaseDao().update(entity);
    }

    /** 
     * 删除实体对象 
     */
    public void delete(T entity) {
    	getDatabaseDao().delete(entity);
    }

    /**
     * 根据主键删除对象
     * 
     * @param id 业务主键
     */
    public void deleteById(PK id) {
    	getDatabaseDao().deleteById(id);
    }


    @NotNull
	protected abstract DatabaseDao<T, PK> getDatabaseDao();
	
}
